/**
 * axios封装
 * 请求拦截、响应拦截、错误统一处理
 */
import axios from 'axios';
import router from '../router';
import {ElMessage} from 'element-plus'



/**
 * 跳转登录页
 * 携带当前页面路由，以期在登录页面完成登录后返回当前页面
 */
const toLogin = () => {
    router.replace({
        path: '/login'
    });
}

/**
 * 跳转激活界面
 */
const toActivate = () => {
    router.replace({
        path: '/activate'
    });
}



const instance = axios.create({timeout: 1000 *  30});

// 设置默认post请求头
instance.defaults.headers.post['Content-Type'] = 'application/json; charset=utf-8';

// 请求拦截器
instance.interceptors.request.use(config => {
    // 可以在这里添加例如token等请求头
    // const token = store.state.token;
    // if (token) {
    //     config.headers['Authorization'] = '';
    // }
    return config;
}, error => {
    return Promise.reject(error);
});

// 响应拦截器
instance.interceptors.response.use(res => {
    if (res.status === 200) {
        if (res.data.code === 0) {
            return Promise.resolve(res.data)
        } else {
            return Promise.reject(res);
        }
    } else {
        switch (res.status) {
            case 401:
                toLogin();
                break
            case 406:
                toActivate();
                break
            default:
                ElMessage.error(res.data.message)
        }
        return Promise.reject(res);
    }
}, error => {
    const {response} = error;
    if (response) {
        switch (response.status) {
            case 401:
                toLogin();
                break
            case 406:
                toActivate();
                break
            case 500:
                ElMessage.error('服务不可用')
                break
            default:
                ElMessage.error(response.data.message)
        }
        return Promise.reject(response);
    } else {
        if (!window.navigator.onLine) {
            ElMessage.error('请检查网络连接')
        }
    }
    return Promise.reject(error);
});

export default instance;